package org.thrj.wechat.sdk;

import org.thrj.wechat.entity.UserSusceptibleInfo;

public interface WeChatCommonSdk {

    /**
     * 获取有效的微信 access_token（自动管理缓存与刷新）
     *
     * @return access_token 字符串，保证有效
     * @throws RuntimeException 获取失败时（如凭证错误）
     */
    String getAccessToken();

    /**
     * 根据微信小程序前端传入的临时登录凭证 (code)，调用微信接口换取用户的敏感信息。
     * 此方法主要完成以下操作：
     * 1. 构造向微信服务器发起请求的 URL，该 URL 包含了小程序的 AppID、AppSecret、用户登录凭证 (code) 以及固定参数。
     * 2. 使用 RestTemplate 向微信的 jscode2session 接口发起 HTTPS GET 请求。
     * 3. 将微信返回的 JSON 响应数据自动反序列化为 UserSusceptibleInfo 对象并返回。
     * 注意：该接口返回的数据通常包含用户的 openid 和 session_key，这些信息较为敏感，应妥善保管。
     *
     * @param code 微信小程序通过 wx.login() 接口获取的用户登录凭证 (临时 code)。该 code 仅能使用一次，
     *             且有较短的有效期（通常为5分钟）。
     * @return UserSusceptibleInfo 包含从微信服务器获取的用户信息的 Java 对象。如果请求失败（如网络问题、参数错误、code失效等），
     * 则返回的对象可能包含错误码 (errcode) 和错误信息 (errmsg)，具体取决于微信的返回结果和 UserSusceptibleInfo 类的定义。
     **/
    UserSusceptibleInfo getUserSusceptibleInfo(String code);

    /**
     * 调用微信内容安全接口，检测文本是否合规
     *
     * @param scene   场景值，1 资料；2 评论；3 论坛；4 社交日志
     * @param openid  用户的OpenID
     * @param content 待检测的文本内容（必填）
     * @throws RuntimeException 内容不合规或检测失败时抛出，包含具体违规类型
     */
    void msgSecCheck(Integer scene, String openid, String content);

}
